/**
 * @file      : ap3216c.h
 * @brief     : AP3216C驱动头文件
 * @author    : huenrong (huenrong1028@gmail.com)
 * @date      : 2021-04-04 14:03:46
 *
 * @copyright : Copyright (c) 2021 胡恩荣
 *
 */

#ifndef __AP3216C_H
#define __AP3216C_H

#include <stdint.h>

// AP3216C I2C设备地址
#define AP3216C_I2C_DEV_NAME "/dev/i2c-0"
// AP3216C I2C器件地址
#define AP3216C_I2C_SLAVE_ADDR 0x1E

// AP3316C寄存器
#define AP3216C_SYSTEM_CONFIG 0x00 // 配置寄存器
#define AP3216C_INT_STATUS 0x01    // 中断状态寄存器
#define AP3216C_INT_CLEAR 0x02     // 中断清除寄存器
#define AP3216C_IR_DATA_LOW 0x0A   // IR数据低字节
#define AP3216C_IR_DATA_HIGH 0x0B  // IR数据高字节
#define AP3216C_ALS_DATA_LOW 0x0C  // ALS数据低字节
#define AP3216C_ALS_DATA_HIGH 0x0D // ALS数据高字节
#define AP3216C_PS_DATA_LOW 0x0E   // PS数据低字节
#define AP3216C_PS_DATA_HIGH 0x0F  // PS数据高字节

// AP3216C模式
#define POWER_DOWN 0x00                // 关闭电源
#define ALS_FUNCTION_ACTIVE 0x01       // 激活ALS模式
#define PS_IR_FUNCTION_ACTIVE 0x02     // 激活PS, IR模式
#define ALS_PS_IR_FUNCTION_ACTIVE 0x03 // 激活ALS, PS, IR模式
#define SW_RESET 0x04                  // 复位
#define ALS_FUNCTION_ONCE 0x05         // ALS模式单次采集
#define PS_IR_FUNCTION_ONCE 0x06       // PS, IR模式单次采集
#define ALS_PS_IR_FUNCTION_ONCE 0x07   // ALS, PS, IR模式单次采集

/**
 * @brief  AP3216C初始化
 * @return 成功: 0
 *         失败: -1
 */
int ap3216c_init(void);

/**
 * @brief  AP3216C读取数据
 * @param  read_ir_data : 输出参数, 读取到的ir数据
 * @param  read_als_data: 输出参数, 读取到的als数据
 * @param  read_ps_data : 输出参数, 读取到的ps数据
 * @return 成功: 0
 *         失败: -1
 */
int ap3216c_read_data(uint16_t *read_ir_data, uint16_t *read_als_data,
                      uint16_t *read_ps_data);

#endif // __AP3216C_H
